package nio;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;


public class Nio1 {

	public static void main(String[] args) throws Exception{
		t1();

	}
	public static void t1() throws Exception{
		FileInputStream fis=new FileInputStream("D:"+File.separator+"demo.txt");
		//拿到管道
		FileChannel fchannel=fis.getChannel();
		//创建缓冲区
		ByteBuffer bb=ByteBuffer.allocate(48);
		//读取数据到缓冲区
		fchannel.read(bb);
		while(fchannel.read(bb)!=-1){
			System.out.println(bb.toString());
			bb.clear();
		}
		fchannel.close();
		fis.close();
	}

}
/**
	Java NIO: Channels and Buffers（通道和缓冲区）

	标准的IO基于字节流和字符流进行操作的，而NIO是基于通道（Channel）和缓冲区（Buffer）进行操作，数据总是从通道读取到缓冲区中，或者从缓冲区写入到通道中。

	Java NIO: Non-blocking IO（非阻塞IO）

	Java NIO可以让你非阻塞的使用IO，例如：当线程从通道读取数据到缓冲区时，线程还是可以进行其他事情。当数据被写入到缓冲区时，线程可以继续处理它。从缓冲区写入通道也类似。

	Java NIO: Selectors（选择器）

	Java NIO引入了选择器的概念，选择器用于监听多个通道的事件（比如：连接打开，数据到达）。因此，单个的线程可以监听多个数据通道。
 */
/**
 * 每次io都是channel 和buffer交互
 * channel是双向的 而流失单向的
 */
